//---------------------------------------------------------------------------
#ifndef EscenaH
#define EscenaH

#include <gl\gl.h>
#include <gl\glu.h>

#include "Lista.h"
#include "DibujoLinea.h"
#include "Lapiz.h"
#include "CodigoFrontera.h"
//---------------------------------------------------------------------------
class Escena {

  public:
     Escena();
     ~Escena();
     void setHDC(HDC h){ hdc=h; }

     Lista<DibujoLinea>* getLineas();
     DibujoLinea* getLineaActual();
     void addLinea();
     void addPunto(GLdouble,GLdouble);
     void Dibuja();
     Punto transformarXY(Punto p);
     GLdouble convertirX(int,int);
     GLdouble convertirY(int,int);
     bool contiene(DibujoLinea*,Punto);
     void seleccionar(int,int);
     void deseleccionar();
     void borrarLineasSeleccionadas();
     void crearPoligono(int,int,Punto*);
     void crearEspiral(int,int,int,int,Punto*);
     bool Zoom(float porcentaje, int nIteraciones);
     void Trasladar(WORD& tecla);
     void recortar(Punto *esquina1, Punto *esquina2);
     bool recortarCohenSuth(Punto *esquina1, Punto *esquina2, Segmento *segmento);
     void obtenerCodigoFrontera(GLdouble x,GLdouble y,GLdouble xmin,GLdouble xmax,GLdouble ymin,GLdouble ymax, CodigoFrontera *&code);
     bool interseccion(CodigoFrontera *code1, CodigoFrontera *code2);
    /* void obtenerCodigoFrontera(GLdouble x,GLdouble y,GLdouble xmin,GLdouble xmax,GLdouble ymin,GLdouble ymax, CodigoFrontera &code);
     bool interseccion(CodigoFrontera code1, CodigoFrontera code2);      */
     
     void aplicarFractalKoch1();
     void aplicarFractalKoch2();
     void aplicarFractalDragon();
     bool existeSeleccionada();
     void vaciaLineas();
     void cambiarParametros(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat) ;

  private:
     Lista<DibujoLinea>* _lineas;
     DibujoLinea* _lineaActual;
     Lapiz* _lapiz;
     int _margen;
     GLfloat xRight, xLeft;
     GLfloat yTop, yBot;
     int ClientWidth, ClientHeight; // Dimensiones de la ventana donde esta la escena
     float ratioViewPort;

      HDC hdc;
};

#endif

